package cn.tannn.tconfig.server.request;



import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.io.Serializable;
import java.util.Objects;

/**
 * 分页
 *
 * @author lxw
 * @date 2018年5月11日
 */
public class PageRequest implements Serializable {

    /**
     * 页码
     */
    private Integer pageIndex;

    /**
     * 数量
     */
    private Integer pageSize;

    public PageRequest() {
    }

    /**
     * 默认 pageIndex = 1
     * @param pageSize 一页显示几条
     */
    public PageRequest(Integer pageSize) {
        // 分页查询在数据库中起始页也为0
        this.pageIndex = 1;
        this.pageSize = pageSize;
    }

    /**
     * 分页
     * @param pageIndex 页码
     * @param pageSize 一页显示几条
     */
    public PageRequest(Integer pageIndex, Integer pageSize) {
        if(pageIndex<1){
            pageIndex = 1;
        }
        // 分页查询在数据库中起始页也为0 ,get处处理了-1
        this.pageIndex = pageIndex;
        this.pageSize = pageSize;
    }

    @Override
    public String toString() {
        return "PageRequest{" +
                "pageIndex=" + pageIndex +
                ", pageSize=" + pageSize +
                '}';
    }


    /**
     * 分页查询要用的正确index
     */
    public Integer getPageIndex() {
        if(Objects.isNull(pageIndex)||pageIndex<1){
            // 分页查询在数据库中起始页也为0
            return 0;
        }
        return pageIndex-1;
    }

    /**
     * 真实的 pageIndex
     */
    public Integer realPageIndex() {
        return pageIndex;
    }

    public void setPageIndex(Integer pageIndex) {
        this.pageIndex = pageIndex;
    }

    public Integer getPageSize() {
        if(Objects.isNull(pageSize)){
            return 20;
        }
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }


    public Pageable getPageable() {
        return org.springframework.data.domain.PageRequest.of(getPageIndex(),
                getPageSize());
    }

    public Pageable getPageable(Sort sort) {
        return org.springframework.data.domain.PageRequest.of(getPageIndex(),
                getPageSize(),
                sort);
    }
}
